package com.atguigu.msmService.controller;

import com.atguigu.commonutils.R;
import com.atguigu.msmService.service.MsmService;
import com.atguigu.msmService.utils.RandomUtil;
import org.apache.commons.lang3.StringUtils;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;

@RestController
@RequestMapping("/eduMsm/msm")
//@CrossOrigin
public class MsmController {
    @Resource
    private MsmService msmService;

    @Resource
    private RedisTemplate<String, String> redisTemplate;

    //发送短信的方法（课程中的方法）
    @GetMapping("send/{phone}")
    public R sendMsm(@PathVariable String phone) {
        //从Redis中获取验证码，如果获取到则直接返回
        String code = redisTemplate.opsForValue().get(phone);
        if (!StringUtils.isEmpty(code)) {
            return R.ok();
        }
        //生成随机值，使用阿里云发送
        code = RandomUtil.getFourBitRandom();
        Map<String, Object> param = new HashMap<>();
        param.put("code", code);
        //调用service发送短信
        boolean isSend = msmService.send(param, phone);
        if (isSend) {
            //发送成功后把验证码放到Redis中，并设置验证码有效时间
            redisTemplate.opsForValue().set(phone, code, 5, TimeUnit.MINUTES);
            return R.ok();
        } else return R.error().message("短信发送失败");
    }

    //发送短信的方法（自己写的方法），验证码不能以0开头，由此基本可确定
    //此方法不能正确运行，因为在判断验证码时，把验证码转换成了Integer类型，而前端发送过来的手机号的验证码会变成"\"2408\""
    //正常形式应该为："2408"
    @GetMapping("sendMsg/{phone}")
    public R sendMsg(@PathVariable String phone) {
        //从Redis中获取验证码，如果获取到则直接返回
        String code = redisTemplate.opsForValue().get(phone);
        if (!StringUtils.isEmpty(code)) {
            return R.ok();
        }
        //生成随机值
        code = RandomUtil.getFourBitRandom();
        int i = Integer.parseInt(code);
        String s = String.valueOf(i);
        redisTemplate.opsForValue().set(phone, s, 5, TimeUnit.MINUTES);
        return R.ok();
    }

}
